package com.java.yz.day13.ketang;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

//字节输入流类: InputStream -- FileInputStream
    /*
        FileInputStream的构造方法
            FileInputStream(File file)
            FileInputStream(String name)

        FileInputStream的成员方法
            public int read()  //一次读出一个字节
            public int read(byte[] b)   一次读出若干字字节，相当于一个容器，一次容纳多少


     */
public class FileInputStreamDemo1 {
    public static void main(String[] args) {
        FileInputStream fis = null;
        try {
             fis = new FileInputStream(new File("src/com/java/yz/day13/ketang/a.txt"));
//             //读出数据在这里操作
//            //System.out.print((char) fis.read()); //97 读出的是97 但是我们想要字符，所以加一个转换类型
//            //加了一个类型转换就是里面的数据了，不再是编码
//            //但是这样一个一个的读太麻烦，所以我们用循环读出所有，不知道读多少次，用while()循环
//            //通过api文件，读到最后一个是-1就结束
//            int i = 0;
//            while ((i=fis.read())!=-1){
//                //System.out.println((char) fis.read());
//                /*读出来的结果是这个，显然不和我们里面的内容一致
//                            a
//                            c
//
//                            ￿
//                 */
//                System.out.print((char) i);
//            }
            //因为一个文件的字节数个数不清楚，所以调用read()读取字节的次数也不知道
            //当我们使用字节流读取汉字的时候，发现，读不懂，因为一个字符在不同的编码下，
            // 所占的字节数是不同的
            // 而我们现在是读取一个字节，就转字符，不是一个完整的汉字，所以看不懂

            //第二种读出数据的方法
            byte[] b1 = new byte[1024];
            int i = 0;
            while ((i=fis.read(b1))!=-1){
                String s = new String(b1, 0, i);
                System.out.println(s);
                /*
                    杨镇真帅
                    杨镇
                    杨镇真帅
                    杨镇
                    \r\n 算两个字节
                 */
            }



        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if (fis != null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
